<?php
declare (strict_types = 1);

namespace app\admin\controller;


use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
use think\Request;

/**
 * 核心是沟通需求、梳理需求
 * 所有的业务逻辑梳理完成之后、都是CURD、处理数据、内置函数其他方式
 */

/**
 * 通过DB类的形式、操作数据
 * Class Manager
 * @package app\admin\controller
 */
class Manager
{
    /**
     * 查询一条数据
     */
    public function getOne(){

        // table 没有设置数据表前缀 、不用创建模型、直接操作数据库
//        $info = Db::table('user')->find(1);
        // name 指定查询表名 设置数据表前缀
        $info = Db::name('user')->find(1);

        # 查询一个不存在的数据  返回null
        $info = DB::name('user')->find(9999);

        // 返回的结果希望是一个空数组
        $info = Db::name('user')->findOrEmpty(9999);
//        dd($info);

        // 查询多条数据 select()
        $data = Db::name('user')->select();
        // 查询某一列
        $data = Db::name('user')->column('username');

        // 添加、更新
        $result = Db::name('user')->save(
            [
                'username' => '2005a',
                'password' => '13221asdfaadsfs',
                'id' => 3
            ]);

        dd($result);

    }

    /**
     * 会员列表
     */
    public function list(){
        // 表名写错了、把最新的数据展示最前面第一页
        $data = Db::name('user')->paginate(2);

        // 可以用assign赋值
//        View::assign('data',$data);
        return View::fetch('admin/manager_list',['data' => $data]);
    }

    /**
     * 添加展示视图
     * @return string
     */
    public function add(){

        # 展示视图和添加使用一个方法
        if (\request()->method() == "POST") {
            // post 提交 添加数据
            $param = \request()->all();
            # 验证参数
            try {
                # 批量一块验证、没有验证通过的信息都输出
                validate(\app\admin\validate\Manager::class)->batch(true)->check($param);

                $data = [
                    'username' => $param['username'],
                    'create_time' => time(),
                    'update_time' => time(),

                    // 单项加密
                    'password' => encrypt_password($param['password']),// encrypt_password()自定义的公共密码加密方法
                    'email' => $param['email'],
                ];
                $result = Db::name('user')->save($data);
                if ($result) {
                    return redirect('/admin/managerList');
                }
            }catch (ValidateException $exception) {
                dd($exception->getError());
            }

        } else {
            // get 请求就是展示视图
            return View::fetch('admin/manager_add');
        }
    }

    /**
     * 删除
     */
    public function delete(){
        # 小小的需求？
        # 当前登录的用户不能删除、正常使用的用户、也不能删除？
        $id = \request()->post('id');
        if (!is_numeric($id)) {
            # 封装一个公共响应方法
            return self_response([],2001,'id不合格');
        }


//        通过DB类实现软删除、调用userSoftDelete('字段',time())方法

        $result = Db::name('user')->delete($id);
        if ($result) {
            return self_response([],200,'ok');
        }else {
            return self_response([],2002,'删除失败');
        }
    }

    /**
     * 更新数据、需要知道更新的是哪条数据
     */
    public function editor(){

        $id = \request()->get('id');
        if (!is_numeric($id)) {
            dd("id不合法、禁止编辑");
        }

        $info = Db::name('user')->findOrEmpty($id);

        return View::fetch('admin/manager_edit',['info' => $info]);

    }

    /**
     * 实现更新
     */
    public function update(){
        $param = \request()->all();

//        验证参数是否合格
        try {
            validate(\app\admin\validate\Manager::class)->scene('update')->batch(true)->check($param);
            $param['update_time']  = time();
            $result = Db::name('user')->save($param);
            if ($result) {
                return redirect('/admin/managerList');

            }
            echo "更新失败";
            dd($result);

        }catch (ValidateException $exception) {
            dd($exception->getError());
        }
    }

    /**
     * 重值密码、
     * 验证旧是否一直
     * 忘记密码？手机号、或者邮箱手机验证
     * 前端传送过来新密码、更新入库
     */
    public function resetPassword(){

    }

}
